using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._Statistics
{
    /// <summary>
    /// <para>Add Z Information</para>
    /// <para>Adds information about elevation properties of features in a Z-enabled feature class.</para>
    /// <para>添加有关启用 Z 的要素类中要素的高程属性的信息。</para>
    /// </summary>    
    [DisplayName("Add Z Information")]
    public class AddZInformation : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddZInformation()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>Input Features</para>
        /// <para>The input features to process.</para>
        /// <para>要处理的输入要素。</para>
        /// </param>
        /// <param name="_out_property">
        /// <para>Output Property</para>
        /// <para><xdoc>
        ///   <para>The Z properties that will be added to the attribute table of the input feature class. The following options are available:</para>
        ///   <bulletList>
        ///     <bullet_item>Spot Z—Spot elevation of single-point feature.</bullet_item><para/>
        ///     <bullet_item>Point Count—Number of points in each multipoint feature.</bullet_item><para/>
        ///     <bullet_item>Lowest Z—Lowest Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Highest Z—Highest Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Average Z—Average Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>3-Dimensional Length—3-dimensional length of each polyline or polygon feature.</bullet_item><para/>
        ///     <bullet_item>Surface Area—Total area of the surface of a multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Vertex Count—Total number of vertices in each polyline or polygon feature.</bullet_item><para/>
        ///     <bullet_item>Lowest Slope—Lowest slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Highest Slope—Highest slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Average Slope—Average slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Volume—Volume of space enclosed by each multipatch feature.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将添加到输入要素类的属性表中的 Z 属性。可以使用以下选项：</para>
        ///   <bulletList>
        ///     <bullet_item>点Z—单点要素的点高程。</bullet_item><para/>
        ///     <bullet_item>点计数 - 每个多点要素中的点数。</bullet_item><para/>
        ///     <bullet_item>最低 Z - 在每个多点、折线、面或多面体要素中找到的最低 Z 值。</bullet_item><para/>
        ///     <bullet_item>最高 Z - 在每个多点、折线、面或多面体要素中找到的最高 Z 值。</bullet_item><para/>
        ///     <bullet_item>平均 Z - 在每个多点、折线、面或多面体要素中找到的平均 Z 值。</bullet_item><para/>
        ///     <bullet_item>三维长度 - 每个折线或面要素的三维长度。</bullet_item><para/>
        ///     <bullet_item>表面积 - 多面体要素表面的总面积。</bullet_item><para/>
        ///     <bullet_item>顶点计数 - 每个折线或面要素中的折点总数。</bullet_item><para/>
        ///     <bullet_item>最低坡度 - 为每个折线、面或多面体要素计算的最低坡度值。</bullet_item><para/>
        ///     <bullet_item>最高坡度 - 为每个折线、面或多面体要素计算的最高坡度值。</bullet_item><para/>
        ///     <bullet_item>平均坡度 - 为每个折线、面或多面体要素计算的平均坡度值。</bullet_item><para/>
        ///     <bullet_item>体积 - 每个多面体要素所包围的空间体积。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public AddZInformation(object _in_feature_class, List<object> _out_property)
        {
            this._in_feature_class = _in_feature_class;
            this._out_property = _out_property;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Add Z Information";

        public override string CallName => "3d.AddZInformation";

        public override List<string> AcceptEnvironments => ["autoCommit", "extent", "workspace"];

        public override object[] ParameterInfo => [_in_feature_class, _out_property, _noise_filtering, _output_feature_class];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input features to process.</para>
        /// <para>要处理的输入要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Output Property</para>
        /// <para><xdoc>
        ///   <para>The Z properties that will be added to the attribute table of the input feature class. The following options are available:</para>
        ///   <bulletList>
        ///     <bullet_item>Spot Z—Spot elevation of single-point feature.</bullet_item><para/>
        ///     <bullet_item>Point Count—Number of points in each multipoint feature.</bullet_item><para/>
        ///     <bullet_item>Lowest Z—Lowest Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Highest Z—Highest Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Average Z—Average Z value found in each multipoint, polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>3-Dimensional Length—3-dimensional length of each polyline or polygon feature.</bullet_item><para/>
        ///     <bullet_item>Surface Area—Total area of the surface of a multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Vertex Count—Total number of vertices in each polyline or polygon feature.</bullet_item><para/>
        ///     <bullet_item>Lowest Slope—Lowest slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Highest Slope—Highest slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Average Slope—Average slope value calculated for each polyline, polygon, or multipatch feature.</bullet_item><para/>
        ///     <bullet_item>Volume—Volume of space enclosed by each multipatch feature.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将添加到输入要素类的属性表中的 Z 属性。可以使用以下选项：</para>
        ///   <bulletList>
        ///     <bullet_item>点Z—单点要素的点高程。</bullet_item><para/>
        ///     <bullet_item>点计数 - 每个多点要素中的点数。</bullet_item><para/>
        ///     <bullet_item>最低 Z - 在每个多点、折线、面或多面体要素中找到的最低 Z 值。</bullet_item><para/>
        ///     <bullet_item>最高 Z - 在每个多点、折线、面或多面体要素中找到的最高 Z 值。</bullet_item><para/>
        ///     <bullet_item>平均 Z - 在每个多点、折线、面或多面体要素中找到的平均 Z 值。</bullet_item><para/>
        ///     <bullet_item>三维长度 - 每个折线或面要素的三维长度。</bullet_item><para/>
        ///     <bullet_item>表面积 - 多面体要素表面的总面积。</bullet_item><para/>
        ///     <bullet_item>顶点计数 - 每个折线或面要素中的折点总数。</bullet_item><para/>
        ///     <bullet_item>最低坡度 - 为每个折线、面或多面体要素计算的最低坡度值。</bullet_item><para/>
        ///     <bullet_item>最高坡度 - 为每个折线、面或多面体要素计算的最高坡度值。</bullet_item><para/>
        ///     <bullet_item>平均坡度 - 为每个折线、面或多面体要素计算的平均坡度值。</bullet_item><para/>
        ///     <bullet_item>体积 - 每个多面体要素所包围的空间体积。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Property")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _out_property { get; set; }


        /// <summary>
        /// <para>Noise Filtering</para>
        /// <para>An optional numeric value used to exclude portions of features from the resulting calculations. This can be useful when the 3D input contains relatively small features with extreme slopes which may bias statistical results. If the 3D input's linear units are meters, specifying a value of 0.001 will result in the exclusion of lines or polygon edges that are shorter than 0.001 meters. For multipatch features, the same value will result in the exclusion of its subparts that have an area less than 0.001 square meters. This parameter does not apply to point and multipoint features.</para>
        /// <para>用于从生成的计算中排除部分要素的可选数值。当 3D 输入包含具有极端斜率的相对较小的要素时，这可能很有用，这可能会使统计结果产生偏差。如果 3D 输入的线性单位为米，则指定值 0.001 将导致排除短于 0.001 米的线或面边。对于多面体要素，相同的值将导致排除面积小于 0.001 平方米的子部分。此参数不适用于点要素和多点要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Noise Filtering")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _noise_filtering { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_feature_class { get; set; }


        public AddZInformation SetEnv(int? autoCommit = null, object extent = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, extent: extent, workspace: workspace);
            return this;
        }

    }

}